package br.uniceub.fsw.academicmobile.dao;

import br.uniceub.fsw.academicmobile.vo.CursoVO;
import java.sql.ResultSet;
import java.util.ArrayList;

import br.uniceub.fsw.academicmobile.vo.DisciplinaVO;
import br.uniceub.fsw.academicmobile.vo.ProfessorVO;
import br.uniceub.fsw.academicmobile.vo.TurmaVO;
import java.util.List;

/**
 * Dao responsável pelas operaçoes de banco associadas ao objeto Disciplina
 * @author Dejavu
 */
public class DisciplinaDAO {

	private BD bd;

	public DisciplinaDAO() {
		bd = new BD();
	}
	
        /**
         * Retorna Disciplina a partir de seu id
         * @param disciplina vo carregando o id da disciplina
         * @return DisciplinaVO objeto disciplina
         */
	public DisciplinaVO consultarDisciplinaPorId(DisciplinaVO disciplina){
		DisciplinaVO retorno = new DisciplinaVO();
		String SQL = "SELECT * FROM tb_disciplina WHERE ID_CD_disciplina=<01>";
		SQL = SQL.replaceAll("<01>", disciplina.getIdCdDisciplina().toString());
		try{
			ResultSet rs = bd.getResultSet(SQL);
			if(rs.next()){
				retorno.setIdCdDisciplina(rs.getInt("ID_CD_disciplina"));
				retorno.setTbCursoIdCdCurso(rs.getInt("tb_curso_ID_CD_curso"));
				retorno.setNoDisciplina(rs.getString("NO_disciplina"));
				retorno.setHrCarga(rs.getString("HR_carga"));
                                retorno.setNrPeriodo(rs.getInt("NR_periodo"));
			}
			rs.close();
		} catch (Exception ex) {
			System.err.println("DisciplinaDAO.consultarDisciplinaPorId:"
					+ ex.getMessage());
		}
		return retorno;
	}
	
	/**
	 * Busca as disciplinas relacionadas a aquele professor a partir de seu id.
	 * @param ProfessorVO Vo carregando o id do professor.
	 * @return ArrayList lista de disciplinas DisciplinaVO.
	 */
	public ArrayList consultarDisciplinaPorProfessor(ProfessorVO professor) {

                String SQL = "SELECT tb_disciplina_ID_CD_disciplina from tb_turma where " +
                        "tb_professor_ID_CD_drt=<01> GROUP BY tb_disciplina_ID_CD_disciplina";
                SQL = SQL.replaceAll("<01>", professor.getIdCdDrt().toString());
		ArrayList listaDisciplinas = new ArrayList();
		try {
			ResultSet rs1 = bd.getResultSet(SQL);
                        while (rs1.next()){
                            String id = rs1.getString("tb_disciplina_ID_CD_disciplina");
                            SQL = "SELECT * FROM tb_disciplina WHERE ID_CD_disciplina ="+id;
                            ResultSet rs2 = bd.getResultSet(SQL);
                            while (rs2.next()) {
				DisciplinaVO d = new DisciplinaVO();
				d.setIdCdDisciplina(rs2.getInt("ID_CD_disciplina"));
				d.setNoDisciplina(rs2.getString("NO_disciplina"));
				d.setHrCarga(rs2.getString("HR_carga"));
				d.setNrPeriodo(rs2.getInt("NR_periodo"));
				listaDisciplinas.add(d);
			}
                            rs2.close();
                        }		
			
		} catch (Exception ex) {
			System.out.println("DisciplinaDAO.consultarDisciplinaPorProfessor:"
					+ ex.getMessage());
		}
		return listaDisciplinas;
	}
        
        /**
         * Retorna disciplinas associadas a um curso
         * @param curso vo carregando o id do curso
         * @return ArrayList lista de disciplinas
         */
        public ArrayList consultarDisciplinaPorCurso(CursoVO curso){
            String SQL = "SELECT * FROM tb_disciplina WHERE tb_curso_ID_CD_curso = <01>";
            SQL = SQL.replaceAll("<01>", curso.getIdCdCurso().toString());
            ArrayList alist = new ArrayList();
            try{
                ResultSet rs = bd.getResultSet(SQL);
                while(rs.next()){
                        DisciplinaVO retorno = new DisciplinaVO();
                        retorno.setIdCdDisciplina(rs.getInt("ID_CD_disciplina"));
                        retorno.setTbCursoIdCdCurso(rs.getInt("tb_curso_ID_CD_curso"));
                        retorno.setNoDisciplina(rs.getString("NO_disciplina"));
                        retorno.setHrCarga(rs.getString("HR_carga"));
                        retorno.setNrPeriodo(rs.getInt("NR_periodo"));
                        alist.add(retorno);
                }
                rs.close();
		} catch (Exception ex) {
			System.err.println("DisciplinaDAO.consultarDisciplinaPorCurso:"
					+ ex.getMessage());
		}
		return alist;
        }
        
        /**
         * Retorna disciplinas a partir de um conjunto de turmas
         * @param ltVO lista contendo uma série de turmas
         * @return ArrayList lista de disciplinas
         * @throws java.lang.Exception
         */
        public ArrayList<DisciplinaVO> getDisciplinaByTurma(List<TurmaVO> ltVO ) throws Exception{
        ArrayList<DisciplinaVO> listaD = new ArrayList();
    	for(TurmaVO tVO : ltVO){
    		listaD.add(tVO.getDisciplina());
    	}
    	
		return listaD;
	}
	
}
